package com.whf.android.jar.web.client;

import android.graphics.Bitmap;
import android.webkit.GeolocationPermissions;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;

import androidx.annotation.NonNull;


/**
 * 主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等
 * 加载的网页的点击回调及定位等对浏览器的处理。
 *
 * @author hf
 * @version 1.0.1
 */
public class WebChromeClientImpl extends WebChromeClient {
    /**
     * onProgressChanged 通知应用程序当前网页加载的进度。
     * <p>
     * 参数说明：
     *
     * @param view        接收WebChromeClient的的webView实例
     * @param newProgress webView接受的进度
     */
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        super.onProgressChanged(view, newProgress);
    }

    /**
     * 当document 的title变化时，会通知应用程序
     * <p>
     * 参数说明：
     *
     * @param view  接收WebViewClient的webView实例
     * @param title document新的title
     */
    @Override
    public void onReceivedTitle(WebView view, String title) {
        super.onReceivedTitle(view, title);
    }

    /**
     * 当前页面有个新的favicon时候，会回调这个函数。
     * <p>
     * 参数说明：
     *
     * @param view 接收WebViewClient的那个实例，前面看到webView.setWebViewClient(new
     *             MyAndroidWebViewClient())，即是这个webView。
     * @param icon 当前页面的favicon 注：很多时间不会跳转到此回调函数，因为很多网站设置了icon，没有设置favicon，
     */
    @Override
    public void onReceivedIcon(WebView view, Bitmap icon) {
        super.onReceivedIcon(view, icon);
    }

    /**
     * 通知应用程序 apple-touch-icon的 url
     * <p>
     * 参数说明：
     *
     * @param view       接收WebViewClient的那个实例，前面看到webView.setWebViewClient(new
     *                   MyAndroidWebViewClient())，即是这个webView。
     * @param url        apple-touch-icon 的服务端地址
     * @param recomposed 如果recomposed 是true 则touch-icon是预先创建的
     *                   <p>
     *                   Tips
     *                   <p>
     *                   如果应用程序需要这个icon的话， 可以通过这个url获取得到 icon。
     */
    @Override
    public void onReceivedTouchIconUrl(WebView view, String url, boolean recomposed) {
        super.onReceivedTouchIconUrl(view, url, recomposed);
    }

    /**
     * webView请求得到focus，发生这个主要是当前webView不是前台状态，是后台webView。
     */
    @Override
    public void onRequestFocus(WebView view) {
        super.onRequestFocus(view);
    }

    /**
     * 覆盖默认的window.alert展示界面，
     */
    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
        return super.onJsAlert(view, url, message, result);
    }

    /**
     * 覆盖默认的window.confirm展示界面，
     */
    @Override
    public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
        return super.onJsConfirm(view, url, message, result);
    }

    /**
     * 覆盖默认的window.prompt展示界面，
     */
    @Override
    public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
        return super.onJsPrompt(view, url, message, defaultValue, result);
    }

    @Override
    public void onGeolocationPermissionsShowPrompt(String origin, @NonNull GeolocationPermissions.Callback callback) {
        callback.invoke(origin, true, false);
        super.onGeolocationPermissionsShowPrompt(origin, callback);
    }
}
